BLibrary10110011101110000001000 = {}

function BLibrary10110011101110000001000:new()
    local BLibrary100100110011110001011001110001000101 = {}
    setmetatable(BLibrary100100110011110001011001110001000101, self)
    if (self.__index ~= self) then
        self.__index = self
    end
    BLibrary100100110011110001011001110001000101:constructor()
    return BLibrary100100110011110001011001110001000101
end

function BLibrary10110011101110000001000:constructor()
    self.BLibrary0111110001000100100111100100110101110 = {}
end

function BLibrary10110011101110000001000:Register(BLibrary01111010001111011111000,
    BLibrary01101101101011101001010001111100, BLibrary01100100011100010001110, BLibrary1110001010100101001001100111111)
    assert(BLibrary01111010001111011111000 and type(BLibrary01111010001111011111000) == "table",
        "The class must be specified.")
    assert(BLibrary01111010001111011111000.constructor, "The method <constructor> must be defined.")
    assert(BLibrary01101101101011101001010001111100 and type(BLibrary01101101101011101001010001111100) == "string",
        "The type of parameter library must be string.")
    if (self.BLibrary0111110001000100100111100100110101110[BLibrary01101101101011101001010001111100]) then
        error(string.format("The library <%s> has been registered.", BLibrary01101101101011101001010001111100))
        return false
    end
    if (BLibrary01111010001111011111000.__index ~= BLibrary01111010001111011111000) then
        BLibrary01111010001111011111000.__index = BLibrary01111010001111011111000
    end
    self.BLibrary0111110001000100100111100100110101110[BLibrary01101101101011101001010001111100] = {}
    self.BLibrary0111110001000100100111100100110101110[BLibrary01101101101011101001010001111100]
        .BLibrary01111010001111011111000 = BLibrary01111010001111011111000
    self.BLibrary0111110001000100100111100100110101110[BLibrary01101101101011101001010001111100]
        .BLibrary01100100011100010001110 = BLibrary01100100011100010001110
    self.BLibrary0111110001000100100111100100110101110[BLibrary01101101101011101001010001111100]
        .BLibrary1110001010100101001001100111111 = BLibrary1110001010100101001001100111111
    return true
end

function BLibrary10110011101110000001000:CreateInstance(BLibrary01101101101011101001010001111100, ...)
    assert(BLibrary01101101101011101001010001111100 and type(BLibrary01101101101011101001010001111100) == "string",
        "The type of parameter library must be string.")
    assert(self.BLibrary0111110001000100100111100100110101110[BLibrary01101101101011101001010001111100],
        string.format("The library <%s> does not exist.", BLibrary01101101101011101001010001111100))
    local BLibrary0011110010011010110001101 = setmetatable({},
        self.BLibrary0111110001000100100111100100110101110[BLibrary01101101101011101001010001111100]
            .BLibrary01111010001111011111000)
    BLibrary0011110010011010110001101:constructor(unpack(arg))
    return BLibrary0011110010011010110001101
end

BLibrary = BLibrary10110011101110000001000:new()
